home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 24 / CU Amiga Magazine's Super CD-ROM 24 (1998)(EMAP Images)(GB)(Track 1 of 2)[!][issue 1998-07].iso / CUCD / Programming / SWI / source / src / pl-itf.c < prev    next >
Encoding:
C/C++ Source or Header  |  1997-08-07  |  1.9 KB  |  143 lines

  1. /*  $Id: pl-itf.c,v 1.35 1997/08/07 07:58:09 jan Exp $
  2.  
  3.     Copyright (c) 1990 Jan Wielemaker. All rights reserved.
  4.     See ../LICENCE to find out about your rights.
  5.     jan@swi.psy.uva.nl
  6.  
  7.     Purpose: foreign language interface
  8. */
  9.  
  10. #include "pl-incl.h"
  11.  
  12. #define setHandle(h, w)        (*valTermRef(h) = (w))
  13. #define valHandleP(h)        valTermRef(h)
  14.  
  15. static inline word
  16. valHandle(term_t r)
  17. { Word p = valTermRef(r);
  18.  
  19.   deRef(p);
  20.   return *p;
  21. }
  22.  
  23.         /********************************
  24.         *           ANALYSIS            *
  25.         *********************************/
  26.  
  27. atomic_t
  28. _PL_atomic(term_t t)
  29. { return valHandle(t);
  30. }
  31.  
  32.  
  33. double
  34. _PL_float_value(atomic_t a)
  35. { return valReal(a);
  36. }
  37.  
  38.  
  39. #if O_STRING
  40. char *
  41. _PL_string_value(atomic_t a)
  42. { return valString(a);
  43. }
  44. #endif /* O_STRING */
  45.  
  46.  
  47. char *
  48. _PL_list_string_value(term_t t)
  49. { char *s;
  50.  
  51.   if ( PL_get_list_chars(t, &s, 0) )
  52.     return s;
  53.  
  54.   return NULL;
  55. }
  56.  
  57.  
  58. long
  59. _PL_integer_value(atomic_t a)
  60. { return valInteger(a);
  61. }
  62.  
  63.  
  64. functor_t
  65. _PL_functor(term_t t)
  66. { word w = valHandle(t);
  67.  
  68.   return isTerm(w) ? functorTerm(w) : (functor_t)0;
  69. }
  70.  
  71.  
  72. term_t
  73. _PL_arg(term_t t, int n)
  74. { term_t a = PL_new_term_ref();
  75.   word w = valHandle(t);
  76.   Word p = argTermP(w, n-1);
  77.  
  78.   deRef(p);
  79.   setHandle(a, isVar(*p) ? makeRef(p) : *p);
  80.  
  81.   return a;
  82. }
  83.  
  84.  
  85. term_t
  86. _PL_strip_module(term_t t, Module *m)
  87. { term_t a = PL_new_term_ref();
  88.  
  89.   PL_strip_module(t, m, a);
  90.  
  91.   return a;
  92. }
  93.  
  94.         /********************************
  95.         *         CONSTRUCTION          *
  96.         *********************************/
  97.  
  98. term_t
  99. _PL_new_term()
  100. { term_t t = PL_new_term_ref();
  101.  
  102.   PL_put_variable(t);
  103.   return t;
  104. }
  105.  
  106.  
  107. term_t
  108. _PL_term(atomic_t a)
  109. { term_t t = PL_new_term_ref();
  110.  
  111.   setHandle(t, a);
  112.  
  113.   return t;
  114. }
  115.  
  116.  
  117. atomic_t
  118. _PL_new_integer(long i)
  119. { return consInt(i);
  120. }
  121.  
  122.  
  123. atomic_t
  124. _PL_new_float(double f)
  125. { return globalReal(f);
  126. }
  127.  
  128.  
  129. #if O_STRING
  130. atomic_t
  131. _PL_new_string(const char *s)
  132. { return globalString(s);
  133. }
  134. #endif /* O_STRING */
  135.  
  136.  
  137. atomic_t
  138. _PL_new_var()
  139. { return 0L;
  140. }
  141.  
  142.  
  143.